PHP opdrachtregel-scripts
Home

Titel

PHP opdrachtregel-scripts

Met de PHP-opdrachtregelinterface (PHO Command-Line Interface of PHP CLI) kan je PHP-programma's (scripts) aanroepen vanaf de Linux- of Windows-terminal, en ze ook plannen met behulp van cron.

PHP opdrachtregelinterface (PHP CLI)

Gewoonlijk dienen command-line PHP-scripts om programmeerfunctionaliteit aan je website toe te voegen die gericht is op het uitvoeren van taken die meer bronnen vereisen (geheugen, CPU). Of waar het om prestatieredenen gewenst is om de uitvoering naar de achtergrond te verplaatsen.

Opdrachtregel PHP-scripts kunnen ook nuttig zijn om willekeurige websitebeheertaken efficiënter en sneller uit te voeren.

Enkele voorbeelden:

  1. Een PHP-script om een ​​nieuwsbrief naar alle website-abonnees te sturen (bijvoorbeeld met veel geheugen of CPU-vereisten)
  2. Een PHP-scriptscript om transactionele e-mails te verzenden (voorbeeld van het offloaden van de uitvoering "naar de achtergrond")
  3. Een PHP-script om nieuw geüploade afbeeldingen te comprimeren of te optimaliseren (zware CPU-taak)

Die scripts zijn niet toegankelijk voor het web. Om ervoor te zorgen dat kwaadwillende gebruikers ze niet kunnen aanroepen.

Voer een PHP-script uit via CLI

Om een PHP-script uit te voeren via de opdrachtregelinterface, roep je het PHP-interpreterprogramma aan en geef je het pad naar het PHP-script als eerste argument door:

php cli-voorbeeld.php

Zorg ervoor dat je de path omgevingsvariabele naar php.exe hebt ingesteld.

Je kan op Linux het PHP-script ook direct uitvoerbaar maken door de juiste shebang aan het begin van het script te plaatsen en het uitvoerbaar te maken. Voeg bovenaan je PHP-script shebang toe:

#!/usr/bin/env php

En maak het PHP-script uitvoerbaar:

chmod +x /pad/naar/cli-voorbeeld.php

Nu kan je het script uitvoeren door de bestandsnaam op te geven:

/pad/naar/cli-voorbeeld.php

Voer een PHP-script uit via cron

Met de Linux cron-service kan je op regelmatige basis bepaalde taken laten uitvoeren.

Wanneer je PHP-scripts uitvoert via cron, gebeurt dat via de PHP-opdrachtregelinterface. Het PHP-script wordt dan volgens een specifiek schema uitgevoerd door het besturingssysteem.

Om een PHP-script voor uitvoering te plannen, start je crontab -e gevolgd door de naam van de taak, waarbij je een planning opgeeft voor het uitvoeren ervan:

  * * * * * /usr/bin/php -d memory_limit=-1 /path/to/cli-voorbeeld.php

Het bovenstaande zal elke minuut /path/to/cli-voorbeeld.php uitvoeren.

Je kan in plaats daarvan het schema aanpassen om het elke 10 minuten uit te laten voeren:

  */10 * * * * /usr/bin/php -d memory_limit=-1 /path/to/cli-voorbeeld.php

Parameters

Bij het aanroepen van een PHP-script vanaf de opdrachtregel kun je $argc gebruiken om te zien hoeveel parameters worden doorgegeven en $argv om toegang tot de parameters te krijgen. Schrijf de volgende code in een bestand met de naam cli-voorbeeld.php:

<?php
    var_dump($argc); //number of arguments passed
    var_dump($argv); //the arguments passed
?>

En voer het script uit via de CLI:

php cli-voorbeeld.php

Je krijgt de volgende output in de terminal:

PS C:\Apps\BookScraper> php cli-voorbeeld.php
int(1)
array(1) {
  [0]=>
  string(17) "cli-voorbeeld.php"
}

De eerste parameter is altijd de naam van het script-bestand.

Voer nu het script uit via de CLI met enkele argumenten, bijvoorbeeld:

php cli-voorbeeld.php kerstmis 2021

Dan krijg je de volgende output:

PS C:\Apps\BookScraper> php cli-voorbeeld.php kerstmis 2021
int(3)
array(3) {
  [0]=>
  string(17) "cli-voorbeeld.php"
  [1]=>
  string(8) "kerstmis"
  [2]=>
  string(4) "2021"
}

Opties toevoegen

Als je variabelenamen wilt toewijzen aan de argumenten die worden doorgegeven, gebruik dan de functie getopt() om dit te doen. Voeg de volgende code toe in cli-voorbeeld.php:

<?php
    var_dump($argc); //number of arguments passed
    var_dump($argv); //the arguments passed

    $val = getopt("p:q:");
    var_dump($val);
    if ($val !== false) {
        echo var_export($val, true);
    }
    else {
        echo "Could not get value of command line option\n";
    }

Voer nu het script uit via de CLI met enkele opties, bijvoorbeeld:

php cli-voorbeeld.php -pkerstmis -p2021

Dan krijg je dit als output:

PS C:\Apps\BookScraper> php cli-voorbeeld.php -pkerstmis -p2021
int(3)
array(3) {
  [0]=>
  string(17) "cli-voorbeeld.php"
  [1]=>
  string(10) "-pkerstmis"
  [2]=>
  string(6) "-p2021"
    string(8) "kerstmis"
    [1]=>
    string(4) "2021"
  }
}
array (
  'p' =>
  array (
    0 => 'kerstmis',
    1 => '2021',
  ),
)

Voer nu het script uit via de CLI met verschillende opties, bijvoorbeeld:

php cli-voorbeeld.php -mkerstmis -p2021 -qnieuwjaar -o2022

Je krijgt dit als output:

PS C:\Apps\BookScraper> php cli-voorbeeld.php -mkerstmis -p2021 -qnieuwjaar -t2022
int(5)
array(5) {
  [0]=>
  string(17) "cli-voorbeeld.php"
  [1]=>
  string(10) "-mkerstmis"
  [2]=>
  string(6) "-p2021"
  [3]=>
  string(11) "-qnieuwjaar"
  [4]=>
  string(6) "-t2022"
}
array(2) {
  ["p"]=>
  string(4) "2021"
  ["q"]=>
  string(9) "nieuwjaar"
}
array (
  'p' => '2021',
  'q' => 'nieuwjaar',
)

Let erop dat je de optie -t en -m niet krijgt. Daarvoor moet je de code in cli-voorbeeld.php aanpassen:

<?php
    var_dump($argc); //number of arguments passed
    var_dump($argv); //the arguments passed

    $val = getopt("p:q:t:m:");
    var_dump($val);
    if ($val !== false) {
        echo var_export($val, true);
    }
    else {
        echo "Could not get value of command line option\n";
    }

Met dit als resultaat:

PS C:\Apps\BookScraper> php cli-voorbeeld.php -mkerstmis -p2021 -qnieuwjaar -t2022clear
int(5)
array(5) {
  [0]=>
  string(17) "cli-voorbeeld.php"
  [1]=>
  string(10) "-mkerstmis"
  [2]=>
  string(6) "-p2021"
  [3]=>
  string(11) "-qnieuwjaar"
  [4]=>
  string(11) "-t2022clear"
}
array(4) {
  ["m"]=>
  string(8) "kerstmis"
  ["p"]=>
  string(4) "2021"
  ["q"]=>
  string(9) "nieuwjaar"
  ["t"]=>
  string(9) "2022clear"
}
array (
  'm' => 'kerstmis',
  'p' => '2021',
  'q' => 'nieuwjaar',
  't' => '2022clear',
)

Joseph Inghelbrecht
2021-12-26 11:15:43